package AspectoLog;

import java.io.FileWriter;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

import org.aspectj.lang.Signature;

public aspect AspectoLogCriacao {	
	FileWriter f = null;
	boolean logAtivo = false; //defie se o aspecto esta ativo
	
	pointcut inicializacoes():
		call(*.*.new(..)) 
				&&  !within(AspectoLogCriacao); //evita recursao
		//	initialization(* .new(..)); 	
	
	after(): inicializacoes() {
		Calendar tempo = new GregorianCalendar();
		String tm = tempo.getTime().toString();
		
		String logNew = new String("");		
		Signature sig = thisJoinPointStaticPart.getSignature();
		String classe = sig.getDeclaringType().getName();
		String metodo = sig.getName();		
		logNew = ("*LOG: Criacao de instancia: " + classe + "." + metodo
				 	+ ": tempo -> " + tm );
	//	System.out.println(logNew);
//		try {
//			f = new FileWriter("LogInicializacao.txt");
//			f.write(" nova chamada do construtor!! \n");
//			f.write( thisJoinPointStaticPart.getSignature().getDeclaringTypeName() );
//			f.write(logNew +"\n");
//			f.close();
//		} catch (IOException e) {
//			e.printStackTrace();
//		}		
		
		// testando escrita em arquivo
		ArqLog log = new ArqLog("LogCriacao.log");
		log.iniciar();
		log.arquivar(thisJoinPoint);	
		
	}
	
	
	// informa a ocorrencia de criacoes
	pointcut criacoes():
		call (* *.cria*(..) )
			&&  !within(AspectoLogCriacao);; 	

	after(): criacoes() {
		Calendar tempo = new GregorianCalendar();
		String tm = tempo.getTime().toString();
		
		String logNew = new String("");		
		Signature sig = thisJoinPointStaticPart.getSignature();
		String classe = sig.getDeclaringType().getName();
		String metodo = sig.getName();		
		logNew = ("*LOG: Criacao de instancia: " + classe + "." + metodo
				 	+ ": tempo -> " + tm );
//		System.out.println(logNew);
//		try {
//			f = new FileWriter("LogCriacao.txt");
//			f.write(" nova chamada do metodo cria!!  \n");
//			f.write( thisJoinPointStaticPart.getSignature().getDeclaringTypeName() );
//			f.write(logNew +"\n");
//			f.close();
//			
//		} catch (IOException e) {
//			e.printStackTrace();
//		}		
		
		// testando escrita em arquivo
		ArqLog log = new ArqLog("LogCriacao.log");
		log.iniciar();
		log.arquivar(thisJoinPoint);	
		
		
	//System.out.println(" Fim da criacao !" + thisJoinPoint );
	}	
}
